package datastructure.stack;

import java.util.Stack;

/**
 * 关于栈的理解
 *      1 栈的主要作用是保存之前遍历的元素, 方便后面进行回溯, 回到之前的元素所在的位置 (树和图的遍历算法)
 *      2 关于栈在运算表达式求值的应用中
 *          中缀表达式的计算求值需要使用两个栈, 分别存放数字和运算符
 *          前缀和后缀表达式的计算求值只需要一个栈(两者的扫描顺序不一样), 需要进行计算的操作数和运算符在栈中是靠在一起的
 *          注意
 *              不管是直接使用中缀表达式计算求值还是把中缀表达式转化为后缀表达式
 *              核心的思想就是遍历的时候运算符先不进行计算(直接入栈), 如果后面紧跟着的运算符优先级比较低或者同级,
 *              那么就可以把前面一个运算符取出来进行处理了(出栈操作),
 *              从局部看, 两个运算符挨在一起, 前高后低, 那么前面的可以先进行计算替换成中间结果
 */
public class StackMain {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        stack.push("1111");
        stack.push("222");
        stack.push("333");
        while (stack.size() > 0) {
            System.out.println(stack.pop());
        }
    }
}
